达梦DM7 与 mybatis生成自增ID |
您所在的位置:网站首页 › mybatis 排序字段自增 › 达梦DM7 与 mybatis生成自增ID |
在《DM7与mybatis(一)——基本CRUD》中,我们介绍了dm7与mybatis的环境集成和基本配置,实现基本的CRUD操作。 在应用开发过程中,ID生成是一种常见的需求,通常基于数据库的自增列(如sqlserver、mysql)、序列(如Oracle)来自动生成。DM7同时支持自增列、序列,本文将介绍如何利用DM7和mybatis实现ID自动生成。 环境准备参见《DM7与mybatis(一)——基本CRUD》。
一、读取序列值生成ID 1、创建示例表和序列 -- 以test用户登录执行以下脚本 -- user_id序列 CREATESEQUENCE seq_user_id INCREMENTBY 1 STARTWITH 1 MAXVALUE 2147483647;
-- 用户信息表 CREATETABLE t_user_seq ( id INTNOTNULL,--用户标识 name VARCHAR(20)NOTNULL,--姓名 phone VARCHAR(50),-- 手机 email VARCHAR(50),-- 邮箱 PRIMARYKEY(id) ); 2、pojo对象 由于表t_user_seq和(一)当中表t_user的字段相同,我们可以复用原来的User对象以及对应的alias定义。 package org.dmstudy.mybatis.domain;
publicclass User {
private Integer id; private String name; private String phone; private String email; /getter/setter省略 }
3、XML映射文件 在resources\mybatis-config.xml中,新增一个mapper配置,加载IdMapper.xml。 ……
…… 新增 org/dmstudy/mybatis/id/dao/IdMapper.xml文件,其内容如下: DOCTYPEmapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select seq_user_id.nextval from dual
insert into t_user_seq (id,name,phone,email) values (#{id},#{name},#{phone},#{email})
注意namespace值对应为"org.dmstudy.mybatis.id.dao.IdMapper"。 其中id=getNextUserId的SELECT节点配置的sql语句是从序列seq_user_id中获取下一个序列值,该值根据定义从1开始,每次增量为1。 id=insert的INSERT节点配置了向表t_user_seq插入记录的语句。
4、Mapper接口 创建org.dmstudy.mybatis.id.dao.IdMapper.java文件,内容如下: package org.dmstudy.mybatis.id.dao; import org.dmstudy.mybatis.domain.User; publicinterface IdMapper { int getNextUserId(); int insert(User user); } 注意接口的全名org.dmstudy.mybatis.id.dao.IdMapper、接口方法getNextUserId、insert与IdMapper.xml中的namespace、语句映射节点id保持一致。
5、调用代码 package org.dmstudy.mybatis.id; …… publicclass IdApp { …… publicvoid insert() { System.out.println("--- insert ---");
// 新建user对象,注意未设置id值 User user = new User(); user.setName("dmtech"); user.setPhone("400-6489899"); user.setEmail("[email protected]");
SqlSession sqlSession = sqlSessionFactory.openSession(); try { // 获取mapper对象 IdMapper mapper = sqlSession.getMapper(IdMapper.class);
// 获取id值 Integer id = mapper.getNextUserId(); System.out.println("成功获取seq_user_id的nextval: " + id); // 设置id值 user.setId(id);
// 将user插入数据库 intcnt = mapper.insert(user); sqlSession.commit(); System.out.println("成功插入 " + cnt + "条记录! ");
} catch (Exception e) { System.out.println("insert执行失败 ,原因:" + e.getMessage()); e.printStackTrace(); sqlSession.rollback(); } finally { sqlSession.close(); } } }
查看执行过程输出log4j日志信息 ---insert --- DEBUG [main] - Opening JDBC Connection DEBUG [main] - Created connection 288994035. DEBUG [main] - Setting autocommit to false on JDBC Connection [dm.jdbc.driver.DmdbConnection@1139b2f3] DEBUG [main] - ==> Preparing: select seq_user_id.nextval from dual DEBUG [main] - ==> Parameters: DEBUG [main] - Preparing: insert into t_user_seq (id,name,phone,email) values (?,?,?,?) DEBUG [main] - ==> Parameters: 40(Integer), dmtech(String), 400-6489899(String), [email protected](String) DEBUG [main] - Preparing: insert into t_user_seq (id,name,phone,email) values (seq_user_id.nextval,?,?,?) DEBUG [main] - ==> Parameters: dmtech(String), 400-6489899(String), [email protected](String) DEBUG [main] - Preparing: select seq_user_id.nextval from dual DEBUG [main] - ==> Parameters: DEBUG [main] - Preparing: insert into t_user_seq (id,name,phone,email) values (?,?,?,?) DEBUG [main] - ==> Parameters: 42(Integer), dmtech(String), 400-6489899(String), [email protected](String) DEBUG [main] - Preparing: insert into t_user_ident (name,phone,email) values (?,?,?) DEBUG [main] - ==> Parameters: dmtech(String), 400-6489899(String), [email protected](String) DEBUG [main] - Preparing: select @@identity DEBUG [main] - ==> Parameters: DEBUG [main] - Preparing: insert into t_user_ident (name,phone,email) values (?,?,?) DEBUG [main] - ==> Parameters: dmtech(String), 400-6489899(String), [email protected](String) DEBUG [main] - |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |